package com.tdam2011.grupo02.ui;

import com.tdam2011.grupo02.R;
import com.tdam2011.grupo02.compatibility.ActionBarActivity;
import com.tdam2011.grupo02.domain.Usuario;
import com.tdam2011.grupo02.messagesender.WebServiceInfo;
import com.tdam2011.grupo02.messagesender.WebServiceSingleton;
import com.tdam2011.grupo02.data.DatabaseHelperSingleton;

import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;

public class PerfilActivity extends ActionBarActivity {

	private String usuario;
	private String nombre;
	private String fechaNac;
	private String mail;
	private String contrasenia;
	private EditText usuarioTv;
	private EditText nombreTv;
	private EditText fechaNacTv;
	private EditText mailTv;
	private ImageButton btnEdNombre;
	private ImageButton btnEdUsuario;
	private ImageButton btnEdMail;
	private ImageButton btnEdFecha;
	private ImageButton btnEdContrasenia;
	private Button btnModificar;
	private int CONTRASENIA_SCREEN_REQUESTED = 0;
	private boolean flag = false;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.perfil);

		setTitle(R.string.tituloPerfil);

		Usuario user = DatabaseHelperSingleton.getInstance(this)
				.getDatabaseHelper().getUsuario();

		/*
		 * usuario = user.get_id(); nombre = user.getNombreCompleto(); fechaNac
		 * = user.getFechaNacimiento(); mail = user.getMail();
		 */
		contrasenia = user.getPassword();

		nombreTv = (EditText) findViewById(R.id.nombreCompleto_perfil);
		usuarioTv = (EditText) findViewById(R.id.nombreUsuario_perfil);
		fechaNacTv = (EditText) findViewById(R.id.fecha_perfil);
		mailTv = (EditText) findViewById(R.id.mail_perfil);
		btnEdNombre = (ImageButton) findViewById(R.id.btn_edNombre);
		btnEdMail = (ImageButton) findViewById(R.id.btn_edMail);
		btnEdFecha = (ImageButton) findViewById(R.id.btn_fechaNac);
		btnEdContrasenia = (ImageButton) findViewById(R.id.btn_edContrasenia);
		btnEdUsuario = (ImageButton) findViewById(R.id.btn_edUsuario);
		btnModificar = (Button) findViewById(R.id.modificarPerfil);

		usuarioTv.setText(user.get_id());
		nombreTv.setText(user.getNombreCompleto());
		fechaNacTv.setText(user.getFechaNacimiento());
		mailTv.setText(user.getMail());

		btnEdNombre.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				nombreTv.setEnabled(true);
				usuarioTv.setEnabled(false);
				fechaNacTv.setEnabled(false);
				mailTv.setEnabled(false);
			}
		});

		btnEdMail.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				nombreTv.setEnabled(false);
				usuarioTv.setEnabled(false);
				fechaNacTv.setEnabled(false);
				mailTv.setEnabled(true);
			}
		});

		btnEdFecha.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				nombreTv.setEnabled(false);
				usuarioTv.setEnabled(false);
				fechaNacTv.setEnabled(true);
				mailTv.setEnabled(false);
			}
		});

		btnEdUsuario.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				nombreTv.setEnabled(false);
				usuarioTv.setEnabled(true);
				fechaNacTv.setEnabled(false);
				mailTv.setEnabled(false);
			}
		});

		btnEdContrasenia.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				contraseniaActivityForResult();
			}
		});

		btnModificar.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {

				usuario = usuarioTv.getText().toString();
				nombre = nombreTv.getText().toString();
				fechaNac = fechaNacTv.getText().toString();
				mail = mailTv.getText().toString();

				if (nombre.equals("") || nombre == null || fechaNac.equals("")
						|| fechaNac == null || mail.equals("") || mail == null) {
					Toast.makeText(PerfilActivity.this,
							getString(R.string.perfilIngreseCamposRequeridos), Toast.LENGTH_LONG)
							.show();

				} else {
					if (usuario.length() > 4) {
						Usuario user = new Usuario();

						user.set_id(usuario);
						user.setNombreCompleto(nombre);
						user.setFechaNacimiento(fechaNac);
						user.setMail(mail);
						user.setPassword(contrasenia);

						WebServiceSingleton ws = WebServiceSingleton
								.getInstance(usuario, contrasenia);
						WebServiceInfo info = ws.registerUser();

						switch (info.getCode()) {

						case WebServiceInfo.SUCCESS:
							if (DatabaseHelperSingleton
									.getInstance(PerfilActivity.this)
									.getDatabaseHelper().addUser(user)) {
								Toast.makeText(PerfilActivity.this, getString(R.string.perfilModificacionExitosa),
										Toast.LENGTH_LONG).show();
								flag = true;
							}

							Intent intent = new Intent(PerfilActivity.this,
									LoginFragmentActivity.class);
							intent.putExtra("user", user.get_id());
							intent.putExtra("password", user.getPassword());
							setResult(0, intent);

							if (flag) {
								finish();
							}
							break;

						default:
							break;
						}
					} else {
						Toast.makeText(
								PerfilActivity.this,
								getString(R.string.perfilCondicionNombreUsuario),
								Toast.LENGTH_LONG).show();
					}
				}
			}
		});
	}

	protected void contraseniaActivityForResult() {
		Intent intent = new Intent(this, PerfilContraseniaActivity.class);
		intent.putExtra("contrasenia", contrasenia);
		startActivityForResult(intent, CONTRASENIA_SCREEN_REQUESTED);
	}

	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);

		if (data != null) {
			if (requestCode == CONTRASENIA_SCREEN_REQUESTED) {
				contrasenia = (String) ((Bundle) data.getExtras())
						.get("contrasenia");
			}
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case android.R.id.home:
			finish();
			break;
		}

		return super.onOptionsItemSelected(item);
	}
}
